Data Binding হল MVVM (Model-View-ViewModel) প্যাটার্নের একটি গুরুত্বপূর্ণ অংশ, যা View এবং ViewModel এর মধ্যে ডেটার স্বয়ংক্রিয় সিঙ্ক্রোনাইজেশন নিশ্চিত করে। Data Binding এর দুইটি প্রধান ধরন হল One-Way এবং Two-Way। এগুলি ভিন্ন ভিন্ন পরিস্থিতিতে ব্যবহৃত হয়, যেখানে প্রতিটির নিজস্ব সুবিধা এবং ব্যবহারিক উদ্দেশ্য রয়েছে।
One-Way Data Binding হল এমন একটি প্রক্রিয়া যেখানে ViewModel থেকে View-এ ডেটা এক দিকেই প্রবাহিত হয়, এবং View থেকে ViewModel-এ কোন ডেটা প্রবাহিত হয় না। এতে ViewModel এর কোনো পরিবর্তন স্বয়ংক্রিয়ভাবে View-এ প্রতিফলিত হয়, কিন্তু ব্যবহারকারী যদি UI তে কোন পরিবর্তন করে (যেমন একটি টেক্সটবক্সে কিছু টাইপ করা), তা ViewModel-এ প্রতিফলিত হয় না।
ধরা যাক, আমাদের একটি Product
Model আছে এবং আমরা ViewModel-এ এই তথ্যটি দেখতে চাই:
ViewModel:
public class ProductViewModel
{
public string ProductName { get; set; }
public decimal Price { get; set; }
}
View (XAML):
<TextBlock Text="{Binding ProductName}" />
<TextBlock Text="{Binding Price}" />
এখানে, ProductName এবং Price এর মান ViewModel থেকে View (TextBlock) এ সরাসরি বাইন্ড হচ্ছে। কিন্তু, যদি ব্যবহারকারী View-এ কোনো পরিবর্তন করে, তা ViewModel এ আপডেট হবে না। শুধুমাত্র ViewModel থেকে View-এ ডেটা প্রবাহিত হচ্ছে।
Two-Way Data Binding হল এমন একটি প্রক্রিয়া যেখানে ডেটা উভয় দিকে প্রবাহিত হয়: ViewModel থেকে View এবং View থেকে ViewModel। এর মানে হলো, যখন ViewModel-এ ডেটা পরিবর্তিত হয়, তখন তা View-এ আপডেট হবে এবং যদি ব্যবহারকারী View-এ কোনো পরিবর্তন করে (যেমন ফর্মের ইনপুট), তখন সেই পরিবর্তন ViewModel-এ প্রতিফলিত হবে।
ধরা যাক, আমরা একই Product
Model ব্যবহার করছি এবং একটি টেক্সটবক্সে ProductName আপডেট করতে চাই।
ViewModel:
public class ProductViewModel : INotifyPropertyChanged
{
private string _productName;
public string ProductName
{
get { return _productName; }
set
{
if (_productName != value)
{
_productName = value;
OnPropertyChanged(nameof(ProductName));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
View (XAML):
<TextBox Text="{Binding ProductName, Mode=TwoWay}" />
<TextBlock Text="{Binding ProductName}" />
এখানে TextBox এর Text প্রপার্টি ProductName এর সাথে Two-Way বাইন্ডিং করা হয়েছে, যার মানে হচ্ছে:
বৈশিষ্ট্য | One-Way Data Binding | Two-Way Data Binding |
---|---|---|
ডেটার প্রবাহ | ViewModel থেকে View-এ শুধুমাত্র। | ViewModel এবং View উভয়ের মধ্যে। |
ডেটার আপডেট | শুধুমাত্র ViewModel পরিবর্তন হলে View আপডেট হয়। | ViewModel এবং View উভয়ই একে অপরকে আপডেট করে। |
ব্যবহার | UI ডেটা শুধুমাত্র প্রদর্শনের জন্য ব্যবহৃত হয়। | UI ডেটা এবং ব্যবহারকারীর ইনপুট উভয়ই ViewModel-এ প্রেরিত হয়। |
কোডিং কমপ্লেক্সিটি | সাধারণ এবং কমপ্লেক্স নয়। | কিছুটা জটিল, কারণ ViewModel-এ প্রপার্টি পরিবর্তন এবং View-এর সাথে সিঙ্ক্রোনাইজেশন প্রয়োজন। |
উদাহরণ | একটি লেবেল বা টেক্সটবক্সের মান দেখানো। | ফর্মের ইনপুট গ্রহণ এবং তা ViewModel-এ আপডেট করা। |
উপযুক্ত টাইপের Data Binding নির্বাচন করা, আপনার অ্যাপ্লিকেশনের প্রয়োজন এবং কার্যকারিতার উপর নির্ভর করে।
common.read_more